import {reqCartList, reqDeleteCartById, reqUpdateCheckedByid} from "@/api";
//search模块的小仓库
//state:仓库存储数据的地方
const state = {
    cartList: []
};
//mutations:修改state的唯一手段
const mutations = {
    GETCARTLIST(state, cartList) {
        state.cartList = cartList
    }
};
//action:处理action, 可以书写自己的业务逻辑，也可以处理异步
const actions = {
    //获取购物车的列表参数
    async getCartList({commit}) {
        let result = await reqCartList()
        //测试
        if (result.code == 200) {
            commit("GETCARTLIST", result.data)
        }
    },
    //删除购物车某个产品
    async deleteCartListBySkuId({ commit }, skuId) {
        let result = await reqDeleteCartById(skuId)
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    //修改购物车某一个产品的选中状态
    async updateCheckedById({ commit }, {skuId,isChecked}){
        let result = await reqUpdateCheckedByid(skuId, isChecked)
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('faile'))
        }
    },
    //删除全部勾选的商品
    deleteAllCheckedCart({dispatch,getters}){
        //context 小仓库，commit 【提交mutaions修改state】 getters【计算属性】 dispatch【派发action】 state【当前仓库数据】
        //获取购物车全部的产品（数组）
        let PromiseAll = []
        getters.cartList.cartInfoList.forEach((item)=>{
            let promise = item.isChecked== 1? dispatch("deleteCartListBySkuId", item.skuId):''
            PromiseAll.push(promise)
        })
        //只要全部的p1和p2...都成功，返回结果即为成功
        //如果有一个失败，返回即为失败结果
        return Promise.all(PromiseAll)
    },
    //修改全部产品的状态
    updateAllCartChecked({dispatch,state}, isChecked){
        let PromiseAll = []
        state.cartList[0].cartInfoList.forEach((item)=>{
            let promise = dispatch("updateCheckedById", {skuId:item.skuId, isChecked});
            PromiseAll.push(promise)
        })
        return Promise.all(PromiseAll)
    },
};
//getters:理解为计算属性，用于简化仓库数据，让组件获取仓库的数据更加方便
//可以把将来在组件当中需要用的数据简化一下
const getters = {
    cartList(state) {
        return state.cartList[0] || {}
    },
    // //计算出来购物车数据
    // cartInfoList(state){
    //     cartList.cartInfoList()
    // }

};

//对外暴露Store类的一个实例
export default {
    state,
    mutations,
    actions,
    getters
}